package net.linku.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import net.linku.annotation.AutoResponse;
import net.linku.domain.LAAccount;
import net.linku.model.req.login.LoginRequestParams;
import net.linku.model.resp.login.LoginResult;
import net.linku.repository.LAAccountRepository;
import net.linku.service.IAdminAccountService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

/**
 * 管理员账户控制器
 * <p>
 * 该类提供了与管理员账户相关的API接口，用于查询管理员账户的详细信息。
 *
 * @author: SilenceTian
 * @date: 2024/7/9 14:14
 * @version: 1.0
 */
@RestController
@AutoResponse
@RequiredArgsConstructor
@RequestMapping("/account")
@Api(tags = "后台账户接口")
public class AdminAccountController {

    private final LAAccountRepository accountRepository;
    private final IAdminAccountService adminAccountService;

    /**
     * 后台管理人员的登录
     *
     * @param loginParams 管理员登录参数
     * @return 返回登录结果，包括token和用户信息
     */
    @PostMapping("/login")
    @ApiOperation(value = "后台管理人员的登录", notes = "根据管理员账户的名称和密码进行登录")
    public LoginResult login(@ApiParam(value = "管理员登录参数", required = true) @Validated @RequestBody LoginRequestParams loginParams) {
        return adminAccountService.accountLogin(loginParams.getAccountCode(), loginParams.getPassword());
    }

    /**
     * 查询管理员账户的详情
     *
     * @param id 管理员账户的ID
     * @return 返回包含管理员账户详细信息的响应对象
     */
    @ApiOperation(value = "查询管理员账户的详情", notes = "根据管理员账户的ID查询详细信息")
    @GetMapping("/admin/account/{id}")
    public LAAccount getAdminAccount(
            @ApiParam(value = "管理员账户的ID", required = true)
            @PathVariable("id") Long id) {
        LAAccount account = accountRepository.getById(id);
        return account;
    }
}
